package flst.ipiweb.struts.action.codepromo;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import flst.ipiweb.service.ServiceCodePromo;
import flst.ipiweb.service.ServiceDate;
import flst.ipiweb.service.ServiceEnseigne;
import flst.ipiweb.transverse.Article;
import flst.ipiweb.transverse.CodePromotionnel;
import flst.ipiweb.transverse.Enseigne;
import flst.ipiweb.transverse.IPIException;
import flst.ipiweb.transverse.TypePromo;

public class UpdateCodePromoPostAction extends Action{

	public ActionForward execute(
			ActionMapping mapping, 
			ActionForm form,
			HttpServletRequest request, 
			HttpServletResponse response)
			throws Exception {
		
			//On récupère la session
			HttpSession session = request.getSession();
			if(session.getAttribute("login") == null)
			{
				return mapping.findForward("login");
			}
			
			//Création du code promo à partir du formulaire
			CodePromoForm vCodePromoForm = (CodePromoForm) form;
			CodePromotionnel codePromo = new CodePromotionnel();
			//Instanciation de l'enseigne associée
			Enseigne enseigne = new Enseigne();
			enseigne.setIdEnseigne(vCodePromoForm.getStore());
			codePromo.setEnseigne(enseigne);
			
			codePromo.setIdCode(vCodePromoForm.getIdCode());			
			codePromo.setIdentifiantCode(vCodePromoForm.getIdentifiantCode());
			codePromo.setType(vCodePromoForm.getTypePromo());
			codePromo.setPourcentage(vCodePromoForm.getPourcentage());
			//Instanciation de l'article associé
			Article article = new Article();
			article.setIdArticle(vCodePromoForm.getRefArticle());
			codePromo.setArticle(article);
			//Gestion des dates
			ServiceDate sDate = new ServiceDate();
			Date dateDebutCode = sDate.convertStringToDate(vCodePromoForm.getDateDebut());
			codePromo.setDateDebut(dateDebutCode);
			Date dateFinCode = sDate.convertStringToDate(vCodePromoForm.getDateFin());
			codePromo.setDateFin(dateFinCode);
			
			
			ServiceCodePromo sCodePromo = new ServiceCodePromo();
			try
			{
				sCodePromo.updateCodePromo(codePromo);
				//Message de succes
				session.setAttribute("success", "CodePromoSuccess.update");
				session.setAttribute("error", null);
			}
			catch(IPIException e)
			{
				//Message d'erreur
				session.setAttribute("error", e.getMessage());
				session.setAttribute("success", null);
				
				request.setAttribute("codePromo", codePromo);
				
				//Gestion des dates
				String dateDebut = sDate.convertDateToString(codePromo.getDateDebut());
				String dateFin = sDate.convertDateToString(codePromo.getDateFin());
				request.setAttribute("dateDebut", dateDebut);
				request.setAttribute("dateFin", dateFin);
				
				//Récupération des enseignes
				ServiceEnseigne sEnseigne = new ServiceEnseigne();
				List<Enseigne> listEnseigne = sEnseigne.listerEnseigne();
				request.setAttribute("listEnseigne", listEnseigne);
				
				//Récupération liste des types de promo
				TypePromo[] typePromo = TypePromo.values();
				request.setAttribute("typePromo", typePromo);
				
				//Titre de la page
				request.setAttribute("pageTitle", "codepromo.new.title");
				//Action du formulaire
				request.setAttribute("action","/update-codepromo-post");
				
				return mapping.findForward("update_code_promo");
			}
	
			return mapping.findForward("list_code_promo");
		}
}
